package daten;

import java.util.Observable;
import java.util.Vector;

import util.ProtectedIterator;

public class DiplomarbeitenContainer extends Observable implements Iterable<Diplomarbeit>{

	private static DiplomarbeitenContainer unique = null;

	private Vector<Diplomarbeit> alleDiplomarbeiten = new Vector<Diplomarbeit>();

	private DiplomarbeitenContainer()
	{
	}

	public static DiplomarbeitenContainer instance()
	{
		if (unique == null)
			unique = new DiplomarbeitenContainer();
		return unique;
	}

	public boolean addDiplomarbeit(Diplomarbeit d)
	{
	    if (alleDiplomarbeiten.contains(d)){
			System.out.println("Diplomarbeit schon vorhanden");
			return false;
	    }
	    alleDiplomarbeiten.addElement(d);
	    setChanged();
	    notifyObservers();
	    return true;
	}

	public void removeDiplomarbeit(Diplomarbeit d)
	{
		if (d.getlinkBetreuer()!=null){
			System.out.println("Diplomarbeit kann nicht geloescht werden");
			return;
		}

		if (alleDiplomarbeiten.removeElement(d)==true){
	        setChanged();
	        notifyObservers();
	    }
	}

	public Diplomarbeit getDiplomarbeit(int pos)
	{
		return alleDiplomarbeiten.elementAt(pos);
	}


	  public void modified() 
	  {
	      setChanged();
	      notifyObservers();
	  }

	public ProtectedIterator<Diplomarbeit> iterator()
	{
		return new ProtectedIterator<Diplomarbeit>(alleDiplomarbeiten.iterator());
	}

	public Vector<Diplomarbeit> getUnbetreuteDiplomarbeiten()
	{
		Vector<Diplomarbeit> unbetreut = new Vector<Diplomarbeit>();
		for(Diplomarbeit d: alleDiplomarbeiten)
		{
			if (d.getlinkBetreuer()==null)
				unbetreut.addElement(d);
		}
		return unbetreut;
	}
}
